#ifndef HANDBIOMETRICDATA_H
#define HANDBIOMETRICDATA_H

#include <QString>
#include <QDebug>
#include <cmath>
#include <vector>
#include <cstring>
#include <cv.h>
#include <highgui.h>

/**
 * @file handbiometricdata.h
 * @author  Paweł Hanejko <phanejko@gmail.com>
 * @version 1.0
 *
 * @section LICENSE
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * General Public License for more details at
 * http://www.gnu.org/copyleft/gpl.html
 *
 * @section DESCRIPTION
 *
 * Plik nagłównkowy zawiera definicję klasy HandBiometricData,
 * która zawiera dane biometryczne dłoni użytkownika.
 */

using namespace cv;


class HandBiometricData
{
public:

    /**
     * Konstruktor
     *
     * @param str ścieżka do pliku z obrazem
     */
    HandBiometricData(QString);
    ///< próg w alg. Canny (ciągłość linni)
    static const int CANNY_THRESH;
    ///< próg do binaryzacji
    static const int BIN_THRESH;
    ///< ratio do 2 progu w Canny: CANNY_THRESH*RATIO
    static const int RATIO;
    ///< wymiar macierzy dla operatora sobela
    static const int KERNEL_SIZE;
    ///< próg poszukiwania małego palca
    static const int LITTLE_TH;
    ///< próg poszukiwania palca serdecznego
    static const int RING_TH;
    ///< próg poszukiwania palca środkowego
    static const int MIDDLE_TH;
    ///< próg poszukiwania palca wskazującego
    static const int INDEX_TH;
    ///< próg poszukiwania kciuka
    static const int THUMB_TH;
    ///< dystans minimalny wymagany w poszukiwaniu minimów/ maksimów (stosowany w celu zmnieszenia liczby punktów do przeszukania)
    static const int DIST_MIN;

    ///< długość palca serdecznego
    double ring_len;
    ///< długość palca srodkowego
    double middle_len;
    ///< długość palca wskazującego
    double index_len;
    ///< długość kciuka
    double thumb_len;

    /**
      * Oblicza odległość między 2 punktami
      *
      * @param p1 stała referencja do punktu
      * @param p2 stała referencja do punktu
      * @return zwraca odległość między punktami p1, p2
      **/
    inline double distance(const Point& p1,const Point& p2)const;

    /**
      * Oblicza dane biometryczne dłoni
      *
      * @param src ścieżka do obrazu dłoni
      **/

    void reprocess(const char* src);

};

#endif // HANDBIOMETRICDATA_H
